
import axios from 'axios'
import { useUserStore } from '@/stores/index'
import { ElMessage } from 'element-plus'
import router from '@/router'

// 创建axios实例
const request = axios.create({
  baseURL: 'http://127.0.0.1:8000',
  timeout: 10000 // 请求超时时间
})

// 配置图片URL的基础路径
export const imageBaseURL = 'http://127.0.0.1:8000'

// axios请求拦截器
request.interceptors.request.use((config) => {
  // 1.从pinia获取token和用户ID
  const userStore = useUserStore()
  const token = userStore.userInfo.token
  const user_id = userStore.userInfo.user_id

  // 检查是否需要用户认证的请求
  const requiresAuth = config.url.startsWith('/member/')
  if (requiresAuth) {
    // 检查用户认证状态
    if (!token || !user_id) {
      // 清除可能不完整的用户信息
      userStore.clearUserInfo()
      // 跳转到登录页
      router.push('/login/')
      return Promise.reject(new Error('请先登录'))
    }
    // 设置认证头
    config.headers.Authorization = `Bearer ${token}`
    config.headers['X-User-Id'] = user_id
  }

  // 添加CSRF相关请求头
  config.headers['X-Requested-With'] = 'XMLHttpRequest'
  config.headers['X-CSRFToken'] = document.cookie.match(/csrftoken=([^;]+)/)?.[1] || ''
  config.withCredentials = true
  return config
}),
  (e) => Promise.reject(e)

// axios响应拦截器
request.interceptors.response.use(
  (res) => {
    // 直接返回响应数据，确保结构一致性
    return res.data
  },
  (e) => {
    // 统一响应错误
    const userStore = useUserStore()
    console.log(e)
    ElMessage.warning(e.response.data.message)
    // 401token失效处理
    // 1.清除用户数据
    // 2.跳转登录页
    if (e.response.status === 401) {
      userStore.clearUserInfo()
      router.push('/login/')
    }
    return Promise.reject(e)
  }
)
export default request
